/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package raccoon.suvisa.datos.fachadas.beans;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import raccoon.suvisa.datos.entities.Control;
import raccoon.suvisa.datos.entities.Cuenta;
import raccoon.suvisa.datos.fachadas.*;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author Gabriel
 */
@Stateless
public class CuentaBean implements CuentaRemote {

    @PersistenceContext
    private EntityManager em;

    @Override
    public Cuenta getCuenta(BigDecimal idCuenta) {
        try {
            List lst = em.createNamedQuery("Cuenta.findByIdCuenta").setParameter("idCuenta", idCuenta).getResultList();
            if (!lst.isEmpty()) {
                Cuenta c = (Cuenta) lst.get(0);
                return c;
            }
        } catch (Exception e) {
        }
        return null;
    }

    @Override
    public BigDecimal guardarNuevaCuenta(Cuenta c) {
        BigInteger id = new BigInteger("0");
        try {
            Logger log = Logger.getLogger(UsuarioBean.class.getName());
            List lst = em.createNamedQuery("Control.findByLlave").setParameter("llave", 'K').getResultList();
            if (!lst.isEmpty()) {
                Control con = (Control) lst.get(0);
                id = con.getIdCuenta();
                id.add(BigInteger.ONE);
                con.setIdCuenta(id.add(BigInteger.ONE));
                BigInteger numCuenta = con.getNumeroCuenta();
                con.setNumeroCuenta(numCuenta.add(BigInteger.TEN));
                em.merge(con);
                c.setNumeroCuenta(numCuenta.add(BigInteger.TEN));
                c.setIdCuenta(new BigDecimal(id.add(BigInteger.ONE).toString()));
                log.info("id cuenta: " + c.getIdCuenta().toString());
                log.info("Tipo cuenta: " + c.getTipocuenta());
                log.info("numero cuenta: " + c.getNumeroCuenta().toString());
                em.persist(c);
            }
            return c.getIdCuenta();
        } catch (Exception e) {
        }
        return new BigDecimal(id);
    }

    @Override
    public boolean actualizarCuenta(Cuenta c) {
        try {
            em.merge(c);
            return true;
        } catch (Exception e) {
        }
        return false;
    }

    @Override
    public List<Cuenta> getAll() {
        try {
            List lst = em.createNamedQuery("Cuenta.findAll").getResultList();
            if (!lst.isEmpty()) {
                return lst;
            }
        } catch (Exception e) {
        }
        return new ArrayList<Cuenta>();
    }
}
